package com.zhanglijie.base.datamoveprodandconsume;

/**
 * @author zhanglijie
 * @version 1.0
 * @since 1.1.0 2022/3/13 0013 2:02
 */
public class MyConsumer4 implements Runnable{
    private final  int total = 5000;
    private int cur = 0;
    // @Override
    // public void run() {
    //         while (cur < total) {
    //             synchronized (this) {//这个方案有问题 会消费到5001 之外 因为sync在while里面 阻塞在sync上的多个线程不会回头判断条件
    //             System.out.println(Thread.currentThread().getName()+"正在消费第" + (++cur) + "数据包");
    //         }
    //     }
    // }

    // @Override
    // public void run() {
    //     synchronized (this) {//这个方案虽然没问题 但是就会是一个线程while一次消费完
    //         while (cur < total) {
    //             System.out.println(Thread.currentThread().getName()+"正在消费第" + (++cur) + "数据包");
    //         }
    //     }
    // }

    @Override
    public void run() {
        while (true) {//最优方案
            synchronized (this) {
                if (cur >= total)
                    break;
                System.out.println(Thread.currentThread()
                    .getName() + "正在消费第" + (++cur) + "数据包");
            }
        }
    }
}
